import heapq
n,m= map(int,input().split())
a = list(map(int,input().split()))
b = [-i for i in a]
heapq.heapify(a)
heapq.heapify(b)
seats = 0
maxVal = 0
minVal = 0
while seats<n:
minSeat = heapq.heappop(a)
minVal+=minSeat
minSeat-=1
if minSeat>0:
heapq.heappush(a,minSeat)
maxSeat = heapq.heappop(b)
maxVal+=abs(maxSeat)
maxSeat+=1
if maxSeat<0:
heapq.heappush(b,maxSeat)
seats+=1
print(maxVal,minVal)
#include <iostream>
#include<algorithm>
#include<queue>
using namespace std;
int
main ()
{
int passengers, seats;
cin >> passengers >> seats;
priority_queue<int,vector<int>,less<int>> eamptysets;
priority_queue<int,vector<int>,greater<int>> eamptysets_min;
while(seats--)
{
int x;
cin>>x;
eamptysets.push(x);
eamptysets_min.push(x);
}
int max=0,min=0;
int temp;
int passengers2=passengers;
while(passengers--)
{
max+=eamptysets.top();
temp=eamptysets.top();
eamptysets.pop();
if(temp-1!=0)
eamptysets.push(temp-1);
}
int temp_min;
while(passengers2--)
{
min+=eamptysets_min.top();
temp_min=eamptysets_min.top();
eamptysets_min.pop();
if(temp_min-1!=0)
eamptysets_min.push(temp_min-1);
}
cout<<max<<" "<<min;
return 0;
}
1487A - Arena | 1520D - Same Differences |
376A - Lever | 1305A - Kuroni and the Gifts |
1609A - Divide and Multiply | 149B - Martian Clock |
205A - Little Elephant and Rozdil | 1609B - William the Vigilant |
978B - File Name | 1426B - Symmetric Matrix |
732B - Cormen --- The Best Friend Of a Man | 1369A - FashionabLee |
1474B - Different Divisors | 1632B - Roof Construction |
388A - Fox and Box Accumulation | 451A - Game With Sticks |
768A - Oath of the Night's Watch | 156C - Cipher |
545D - Queue | 459B - Pashmak and Flowers |
1538A - Stone Game | 1454C - Sequence Transformation |
165B - Burning Midnight Oil | 17A - Noldbach problem |
1350A - Orac and Factors | 1373A - Donut Shops |
26A - Almost Prime | 1656E - Equal Tree Sums |
1656B - Subtract Operation | 1656A - Good Pairs |